package com.orangecy.rulesubscribe.callback;

import com.orangecy.common.result.PlainResult;
import com.orangecy.rulesubscribe.context.RuleContext;

/**
 * @Author : orangeCy.奕
 * @Product : 猎豹养成产品源码
 * @Time : 2021/10/22
 * @Desc : 编排抽象-执行事件CallBack
 */
public interface ActionCallBack<R extends PlainResult<R>,C extends RuleContext> {
    /**
     * 对上下文参数初始化校验
     * @param context
     */
    void valParamContext(C context);

    /**
     * 路由决策订阅者身份
     * @param context
     */
    void routerSubscriber(C context);

    /**
     * 识别订阅者身份关联规则匹配
     * @param context
     */
    void mappingSubscribeRules(C context);

    /**
     * 可扩展 对外集成订阅动态条件Filter
     */
    void filterSubscribeRules(C context);

    /**
     * 执行-前置处理
     *
     * @param context
     */
    void ruleProcessBefore(C context);

    /**
     * 执行
     * @param context
     */
    void ruleProcess(C context);

    /**
     * 执行-后置处理
     *
     * @param context
     */
    void ruleProcessAfter(C context);

    /**
     * 装配结果
     * @param context
     * @return
     */
    PlainResult<R> assemble(C context);
}